package com.dataconver.service;

import com.dataconver.config.DataSyncProperties;
import com.dataconver.scheduler.SyncScheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * 数据同步初始化服务
 * 在Spring Boot启动完成后自动启动手动同步功能
 * 定时同步现在通过@Scheduled注解自动管理
 */
@Component
public class DataSyncInitializer implements CommandLineRunner {
    
    private static final Logger logger = LoggerFactory.getLogger(DataSyncInitializer.class);
    
    @Autowired
    private DataSyncProperties dataSyncProperties;
    
    @Autowired
    private SyncScheduler syncScheduler;
    
    @Override
    public void run(String... args) {
        logger.info("=== SQLServer到MySQL数据同步项目启动 ===");
        logger.info("JDK版本: {}", System.getProperty("java.version"));
        logger.info("项目版本: 1.0.0");
        
        try {
            // 显示配置信息
            logger.info("同步配置:");
            logger.info("  批处理大小: {}", dataSyncProperties.getBatchSize());
            logger.info("  最大重试次数: {}", dataSyncProperties.getMaxRetries());
            logger.info("  重试延迟: {}ms", dataSyncProperties.getRetryDelay());
            
            // 启动定时同步服务（现在通过@Scheduled注解自动管理）
            if (dataSyncProperties.getScheduler().isEnabled()) {
                logger.info("启动定时同步服务...");
                syncScheduler.startScheduledSync();
                
                String cronExpression = dataSyncProperties.getCron();
                logger.info("✅ 定时同步服务已启动");
                logger.info("📅 定时同步时间: {}", getCronDescription(cronExpression));
                
                if (dataSyncProperties.getScheduler().isManualSync()) {
                    logger.info("⌨️  手动同步: 按 's' 键执行同步");
                    logger.info("💡 程序将持续运行，等待定时任务或手动指令...");
                }
            } else {
                logger.info("定时同步服务已禁用");
            }
            
        } catch (Exception e) {
            logger.error("项目启动失败", e);
        }
    }
    
    private String getCronDescription(String cronExpression) {
        if (cronExpression == null || cronExpression.trim().isEmpty()) {
            return "未配置";
        }
        String[] parts = cronExpression.split(" ");
        if (parts.length < 5) {
            return cronExpression; // 显示原始表达式
        }
        return String.format("%s %s %s %s %s", parts[0], parts[1], parts[2], parts[3], parts[4]);
    }
}
